import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {

    static int k;//喷气背包的最大高度
    static int m,n;//混沌之弟的范围
    static int A,B,C,D;//起始坐标 终点坐标
    static boolean[][] visit;//说明当前结点是否遍历过
    static int[][] high;//用来表示不同的高度

    static int[] gX={0,-1,0,1};//模拟上左下右
    static int[] gY={1,0,-1,0};


    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        m=scan.nextInt();
        n=scan.nextInt();
        k=scan.nextInt();
        A=scan.nextInt()-1;
        B=scan.nextInt()-1;
        C=scan.nextInt()-1;
        D=scan.nextInt()-1;

        visit=new boolean[m][n];
        high=new int[m][n];
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                high[i][j]=scan.nextInt();
            }
        }


        //深度遍历起点
        dfs(A,B);

        if(visit[C][D]){
            System.out.print("Yes");
            return;
        }

        //遍历过的点统一+k
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(visit[i][j]){
                    visit[i][j]=false;
                    high[i][j]+=k;
                }
            }
        }

        //清楚标志位，重新深度遍历，从起点
        dfs(A,B);
        System.out.print(visit[C][D]?"Yes":"No");

        scan.close();
    }


    private static void dfs(int A,int B){
        visit[A][B]=true;

        for(int i=0;i<4;i++){
            int X=A+gX[i];
            int Y=B+gY[i];

            //对于周围的点 不能越界 也不能已经访问过 其次 AB点对应的高度不能大于XY点
            if(X<0||Y<0||X>=m||Y>=n||visit[X][Y]||high[A][B]<high[X][Y])continue;
            dfs(X,Y);
        }
    }
}